package com.inspinia.upms.dao;


import com.inspinia.base.dao.BaseDao;
import com.inspinia.base.pagination.PageQueryVo;
import com.inspinia.base.pagination.Pager;
import com.inspinia.upms.common.model.role.UpmsRole;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 角色表 数据层
 * 
 * @author ruoyi
 */
public interface UpmsRoleDao extends BaseDao<UpmsRole> {
    int countByName(@Param("name") String roleName, @Param("id") Long roleId);

    List<Long> findResourceIdByRoleId(@Param("id") Long roleId);

    int deleteResources(@Param("roleId") Long roleId);

    int addResources(@Param("roleId") Long roleId, @Param("resourceId") Long resourceId);

    @Override
    Pager<UpmsRole> findPage(PageQueryVo pageVo);

    /**
     * 获取所有角色
     * @param roleIds 根据id集合获取角色信息
     * @return 角色列表集合
     */
    List<UpmsRole> findByIds(List<Long> roleIds);

    List<UpmsRole> findAll();

    List<String> findRoleNamesByUserId(@Param("userId") Long userId);

    /**
     * 找出用户id集合中属于某个角色的用户
     *
     * @param userIds 用户id集合
     * @param roleId  期望的角色id
     * @return 用户id集合
     */
    List<Long> findOutUserIsRole(@Param("userIds") List<Long> userIds, @Param("roleId") Long roleId);

    /**
     * 根据角色名称得到角色的id
     * @param roleName 角色名称
     * @return 角色id
     */
    Long getIdByRoleName(@Param("roleName") String roleName);
    /**
     * 查找角色下的所有用户id
     *
     * @param roleId 角色id
     * @return
     */
    List<Long> findUserIdsByRoleId(Long roleId);
    /**
     * 查找用户的所有角色
     *
     * @param userId
     * @return
     */
    List<UpmsRole> getRoleByUserId(@Param("userId") Long userId);

    int deleteUserRole(Long roleId);

}
